﻿using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using UniMana.Data;
using UniMana.Utils.Controls;
using UniMana.Utils.Data;
using System.Runtime.InteropServices;
using UniMana.Utils.Configs;
using DevExpress.XtraRichEdit.API.Word;

namespace UniMana.Win.Tool
{
    public partial class FrmSoftware_RequestForm : DevExpress.XtraEditors.XtraForm
    {
        private DBMain m_dbTraining = new DBMain();
        private Personnel_PersonnelInfo personSenderInfo;
        private Personnel_PersonnelInfo personReceiverInfo;
        private Software_RequestFormInfo sofwareRequestInfo;
        private DataTable m_tblSofwareDetail;
        DataTable m_tblSoftware = new DataTable();        

        private int m_iSofwareKey = 0;
        private int m_iTask = 0;
        private int m_iStage = 0;
        int m_iconfirm = 0; // = 0 : người gửi , = 1 : người tiếp nhận
        bool IsEdit = false;

        private bds m_bds = new bds();

        public FrmSoftware_RequestForm()
        {
            if (!SysUtils.CheckAccessByRule(RuleConfig.PYC))
            {
                XtraMessageBox.Show("Bạn không có quyền này!", "Thông báo");
                return;
            }
            InitializeComponent();
        }

        private void FrmSoftware_RequestForm_Load(object sender, EventArgs e)
        {
            LoadData();
            GetListRequest();
            SetNotAllowEdit();
            Auto.Enabled = true;
            IsEdit = false;
            grcComment.Enabled = false;
            xucBar3.Enabled = true;
            xucBar3.AddNewVisible = true;
            xucBar3.DeleteVisible = false;
            xucBar3.EditVisible = false;
            xucBar3.CancelVisible = false;
            xucBar3.SaveVisible = false;
            xucBar3.ExportExcelVisible = false;

            xucBar3.ReLoadVisible = false;      // Chức năng reopen
        }

        private void LoadData()
        {
            rluCatalogue_RuleNameVi.GetData(m_dbTraining.m_DCReadOnly.Catalogue_RuleNameVis, "Catalogue_RuleNameViKey", "Name");
            gluCatalogue_DepartmentSend.GetData(m_dbTraining.m_DCReadOnly.Catalogue_Departments, "Catalogue_DepartmentKey", "Name");
            gluCatalogue_DepartmentReceive.GetData(m_dbTraining.m_DCReadOnly.Catalogue_Departments, "Catalogue_DepartmentKey", "Name", noChoose: true);
            gluPersonnel_Personnel.GetData(m_dbTraining.m_DCReadOnly.Personnel_Personnels.GetListByDepartment(GetValueLookUpEdit.ConvertValueToInt(gluCatalogue_DepartmentReceive.EditValue)),
                "Personnel_PersonnelKey",
                "FullName");
            rluPersonnel_Personnel.GetData(m_dbTraining.m_DCReadOnly.Personnel_Personnels.GetListByDepartment(GetValueLookUpEdit.ConvertValueToInt(gluCatalogue_DepartmentReceive.EditValue)),
                "Personnel_PersonnelKey",
                "FullName");
            rluStage.GetData(DTStage, "StageKey", "Name");
            rluCatalogue_Priority.GetData(m_dbTraining.m_DCReadOnly.Catalogue_Priorities, "Catalogue_PriorityKey", "Name");
            gluSubtitle.GetData(m_dbTraining.m_DCReadOnly.Catalogue_RuleNameVis, "Catalogue_RuleNameViKey", "Name");

            DateTime now = SysDateTime.Now;
            labelControl1.Text = "Ngày " + now.Day + " tháng " + now.Month + " năm " + now.Year;
            personSenderInfo = new Personnel_PersonnelInfo(Guid.Parse(Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString()));
            gluCatalogue_DepartmentSend.Enabled = false;
        }

        /// <summary>
        /// Lấy danh sách phiếu yêu cầu
        /// </summary>

        private void GetListRequest()
        {
            m_tblSoftware = m_dbTraining.m_DCReadOnly.Software_RequestForms.GetListItem(Guid.Parse(Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString()),
                Utils.LoginInfo.GblLoginInfo.iDepartmentKey,
                ReturnStage(cmbStage.Text),
                ReturnTask(cmbTask.Text)).ToDataTable();

            if (m_tblSoftware.Rows.Count != 0)
            {
                gctSoftware_RequestForm.DataSource = m_tblSoftware;
                grvSoftware_RequestForm.ExpandAllGroups();
            }
            else
            {
                gctSoftware_RequestForm.DataSource = null;
                Resetvalues();
            }
        }

        /// <summary>
        /// Xem danh sách các phiếu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void btnView_Click(object sender, EventArgs e)
        {
            m_iTask = ReturnTask(cmbTask.Text);
            m_iStage = ReturnStage(cmbStage.Text);
            GetListRequest();
        }

        /// <summary>
        /// Combobox Loại
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>

        private int ReturnTask(string text)
        {
            if (text == "Phân công")
                return 0;
            if (text == "Được phân công")
                return 1;
            if (text == "-- Chọn tất cả --")
                return 2;
            return 2;
        }

        /// <summary>
        /// Combobox Tình trạng
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>

        private int ReturnStage(string text)
        {
            if (text == "-- Chọn tất cả --")
                return 0;
            if (text == "Chưa tiếp nhận")
                return 1;
            if (text == "Đã tiếp nhận")
                return 2;
            if (text == "Hoàn thành")
                return 3;
            return 0;
        }

        /// <summary>
        /// Tình trạng phiếu
        /// </summary>

        private DataTable DTStage
        {
            get
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("StageKey", typeof(int));
                dt.Columns.Add("Name", typeof(string));
                dt.Rows.Add("1", "Chưa tiếp nhận");
                dt.Rows.Add("2", "Đã tiếp nhận");
                dt.Rows.Add("3", "Hoàn thành");
                return dt;
            }
        }        

        /// <summary>
        /// Chọn và hiển thị chi tiết phiếu yêu cầu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void gctSoftware_RequestForm_Click(object sender, EventArgs e)
        {
            IsEdit = false;
            if ((!grvSoftware_RequestForm.IsFilterRow(grvSoftware_RequestForm.FocusedRowHandle)) && (!grvSoftware_RequestForm.IsGroupRow(grvSoftware_RequestForm.FocusedRowHandle)))
            {
                if (grvSoftware_RequestForm.RowCount > 0)
                {
                    int iSoftware_RequestFormKey = this.grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToString().ToInt();
                    personSenderInfo = new Personnel_PersonnelInfo(Guid.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclPersonel_PersonelKeyRequest).ToString()));
                    try
                    {
                        personReceiverInfo = new Personnel_PersonnelInfo(Guid.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclPersonel_PersonelKeyRecipient).ToString()));
                    }
                    catch { personReceiverInfo = new Personnel_PersonnelInfo(); }
                    sofwareRequestInfo = new Software_RequestFormInfo(iSoftware_RequestFormKey);
                    // Người gửi
                    if (sofwareRequestInfo.Properties.Personel_PersonelKeyRequest != null)
                        m_iconfirm = 0;
                    // Người nhận
                    else
                        m_iconfirm = 0;
                    GetRequestForm(iSoftware_RequestFormKey);

                    SetNotAllowEdit();
                    btnSend.Enabled = false;
                    btnUpdate.Enabled = false;
                    grcComment.Enabled = true;
                    xucBar3.Enabled = true;
                    xucBar3.AddNewVisible = true;
                    xucBar3.DeleteVisible = true;
                    xucBar3.ExportExcelVisible = true;
                    //Nếu là người nhận thì không được phép xóa
                    if (sofwareRequestInfo.Properties.Personel_PersonelKeyRequest != Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey)
                        xucBar3.DeleteVisible = false;
                    xucBar3.EditVisible = true;
                    xucBar3.CancelVisible = false;
                    xucBar3.SaveVisible = false;
                    gluSubtitle.Enabled = false;
                    gluCatalogue_DepartmentReceive.Enabled = false;
                    gluPersonnel_Personnel.Enabled = false;

                    if (sofwareRequestInfo.Properties.StageKey == 1)
                    {
                        btnUpdate.Text = "Chưa tiếp nhận";
                    }
                    if (sofwareRequestInfo.Properties.StageKey == 2)
                    {
                        btnUpdate.Text = "Đã tiếp nhận";
                    }
                    if (sofwareRequestInfo.Properties.StageKey == 3)
                    {
                        btnUpdate.Text = "Hoàn thành";
                    }
                }
            }
        }

        /// <summary>
        /// Thiết lập lại chi tiết phiếu yêu cầu
        /// </summary>

        private void Resetvalues()
        {
            IsEdit = false;
            lbcRequestFormID.Text = "";
            lbcSenderID.Text = "";
            lbcSenderName.Text = "";
            gluCatalogue_DepartmentSend.EditValue = null;
            gluCatalogue_DepartmentSend.Enabled = false;
            gluCatalogue_DepartmentReceive.EditValue = null;
            gluCatalogue_DepartmentReceive.Enabled = false;
            gluPersonnel_Personnel.EditValue = null;
            gluPersonnel_Personnel.Enabled = false;
            lbcReceiverID.Text = "";
            gluSubtitle.EditValue = null;
            gluSubtitle.Enabled = false;
            gctSoftware_RequestFormDetail.DataSource = null;
        }

        /// <summary>
        /// Hiện chi tiết khi chọn từng yêu cầu
        /// </summary>
        /// <param name="_iSoftware_RequestFormKey"></param>
        private void GetRequestForm(int _iSoftware_RequestFormKey)
        {
            lbcRequestFormID.Text = sofwareRequestInfo.Properties.ID;
            lbcSenderID.Text = personSenderInfo.Properties.ID;
            lbcSenderName.Text = personSenderInfo.Properties.LastName + " " + personSenderInfo.Properties.Name;
            gluCatalogue_DepartmentSend.EditValue = personSenderInfo.Properties.Catalogue_DepartmentKey;
            if (personReceiverInfo.Properties.Personnel_PersonnelKey != null)
            {
                lbcReceiverID.Text = personReceiverInfo.Properties.ID;
                gluCatalogue_DepartmentReceive.EditValue = sofwareRequestInfo.Properties.Catalogue_DepartmentKeySender;
            }
            gluCatalogue_DepartmentReceive.EditValue = grvSoftware_RequestForm.GetFocusedRowCellValue(gclCatalogue_DepartmentKey).ToString().ToInt();
            if (sofwareRequestInfo.Properties.Personel_PersonelKeyRecipient != null)
                gluPersonnel_Personnel.EditValue = Guid.Parse(sofwareRequestInfo.Properties.Personel_PersonelKeyRecipient.ToString());
            else
                gluPersonnel_Personnel.EditValue = null;
            gluSubtitle.EditValue = grvSoftware_RequestForm.GetFocusedRowCellValue(gclSubtitle).ToString().ToInt();

            m_tblSofwareDetail = new DataTable();
            m_tblSofwareDetail = m_dbTraining.m_DCReadOnly.Software_RequestForms.GetListDetail(m_dbTraining.m_DCReadOnly.Software_RequestFormDetails,
                sofwareRequestInfo.Properties.Software_RequestFormKey).ToDataTable();
            if (m_tblSofwareDetail.Rows.Count > 0)
            {
                DataView dview = m_tblSofwareDetail.DefaultView;
                dview.Sort = "ListOfNumbers ASC";
                m_tblSofwareDetail = dview.ToTable();

                gctSoftware_RequestFormDetail.DataSource = m_tblSofwareDetail;
            }
            else
            {
                gctSoftware_RequestFormDetail.DataSource = null;
            }
        }

        /// <summary>
        /// Thay đổi danh sách người được yêu cầu theo phòng ban
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void gluCatalogue_DepartmentReceive_EditValueChanged(object sender, EventArgs e)
        {
            gluPersonnel_Personnel.GetData(m_dbTraining.m_DCReadOnly.Personnel_Personnels.GetListByDepartment(GetValueLookUpEdit.ConvertValueToInt(gluCatalogue_DepartmentReceive.EditValue)),
                "Personnel_PersonnelKey",
                "FullName");
        }

        /// <summary>
        /// Thay đổi phòng ban theo người yêu cầu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void gluPersonnel_Personnel_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                Personnel_PersonnelInfo perinfo = new Personnel_PersonnelInfo(Guid.Parse(gluPersonnel_Personnel.EditValue.ToString()));
                gluCatalogue_DepartmentReceive.EditValue = perinfo.Properties.Catalogue_DepartmentKey;
                lbcReceiverID.Text = perinfo.Properties.ID;
            }
            catch { }
        }

        #region [Cài đặt các thao tác phụ trên xucbar]
        /// <summary>
        /// Hủy các thao tác
        /// </summary>

        private void SetNotAllowEdit()
        {
            this.gclListOfNumbers.OptionsColumn.AllowEdit = false;              // STT
            this.gclPriority.OptionsColumn.AllowEdit = false;                   // Độ ưu tiên
            this.gclTask.OptionsColumn.AllowEdit = false;                       // Diễn giải
            this.gclDateRequest.OptionsColumn.AllowEdit = false;                // Ngày yêu cầu
            this.gclRequireNotes.OptionsColumn.AllowEdit = false;               // Ghi chú (yêu cầu)
            this.gclStage.OptionsColumn.AllowEdit = false;                      // Tình trạng
            this.gclPersonel_PersonelKeyRecipientDetail.OptionsColumn.AllowEdit = false;  // Người tiếp nhận
            this.gclDateAccept.OptionsColumn.AllowEdit = false;                 // Ngày tiếp nhận
            this.gclDayTaskFinish.OptionsColumn.AllowEdit = false;              // Dự đoán hoàn thành
            this.gclFeedbackNotes.OptionsColumn.AllowEdit = false;              // Ghi chú (tiếp nhận)
            //_gclTake = false;
            this.gclTake.OptionsColumn.AllowEdit = false;                       // Tiếp nhận
            this.gclPercentFinish.OptionsColumn.AllowEdit = false;              // Phần trăm hoàn thành
            //this.gclNoticeFinish.OptionsColumn.AllowEdit = false;             // Báo hoàn thành
            this.gclDateFinishTrue.OptionsColumn.AllowEdit = false;             // Ngày hoàn thành
            //_gclAgreeFinish = false;
            this.gclAgreeFinish.OptionsColumn.AllowEdit = false;                // Duyệt
            this.gclCancel.OptionsColumn.AllowEdit = false;
        }

        /// <summary>
        /// Thiết lập thao tác người gửi
        /// </summary>

        private void SetEditSender()
        {
            this.gclListOfNumbers.OptionsColumn.AllowEdit = false;              // STT
            this.gclPriority.OptionsColumn.AllowEdit = true;                        // Độ ưu tiên
            this.gclTask.OptionsColumn.AllowEdit = true;                            // Diễn giải
            this.gclDateRequest.OptionsColumn.AllowEdit = true;                     // Ngày yêu cầu
            this.gclRequireNotes.OptionsColumn.AllowEdit = true;                    // Ghi chú (yêu cầu)
            this.gclStage.OptionsColumn.AllowEdit = false;                      // Tình trạng
            //this.gclPersonel_PersonelKeyRecipientDetail.OptionsColumn.AllowEdit = true;     // Người tiếp nhận
            this.gclDateAccept.OptionsColumn.AllowEdit = false;                 // Ngày tiếp nhận
            this.gclDayTaskFinish.OptionsColumn.AllowEdit = false;              // Dự đoán hoàn thành
            this.gclFeedbackNotes.OptionsColumn.AllowEdit = false;              // Ghi chú (tiếp nhận)
            //_gclTake = false;
            this.gclTake.OptionsColumn.AllowEdit = false;                       // Tiếp nhận
            this.gclPercentFinish.OptionsColumn.AllowEdit = false;              // Phần trăm hoàn thành
            //this.gclNoticeFinish.OptionsColumn.AllowEdit = false;             // Báo hoàn thành
            this.gclDateFinishTrue.OptionsColumn.AllowEdit = false;             // Ngày hoàn thành
            //_gclAgreeFinish = true;
            this.gclAgreeFinish.OptionsColumn.AllowEdit = true;                // Duyệt
            this.gclCancel.OptionsColumn.AllowEdit = false;
        }

        /// <summary>
        /// Thiết lập thao tác người nhận
        /// </summary>

        private void SetEditReceiver()
        {
            this.gclListOfNumbers.OptionsColumn.AllowEdit = false;              // STT
            this.gclPriority.OptionsColumn.AllowEdit = true;                        // Độ ưu tiên
            this.gclTask.OptionsColumn.AllowEdit = true;                            // Diễn giải
            this.gclDateRequest.OptionsColumn.AllowEdit = true;                     // Ngày yêu cầu
            this.gclRequireNotes.OptionsColumn.AllowEdit = false;               // Ghi chú (yêu cầu)
            this.gclStage.OptionsColumn.AllowEdit = false;                      // Tình trạng
            //this.gclPersonel_PersonelKeyRecipientDetail.OptionsColumn.AllowEdit = false;   // Người tiếp nhận
            this.gclDateAccept.OptionsColumn.AllowEdit = true;                      // Ngày tiếp nhận
            this.gclDayTaskFinish.OptionsColumn.AllowEdit = true;                   // Dự đoán hoàn thành
            this.gclFeedbackNotes.OptionsColumn.AllowEdit = true;                   // Ghi chú (tiếp nhận)
            //_gclTake = true;
            this.gclTake.OptionsColumn.AllowEdit = true;                            // Tiếp nhận
            this.gclPercentFinish.OptionsColumn.AllowEdit = true;                   // Phần trăm hoàn thành
            //this.gclNoticeFinish.OptionsColumn.AllowEdit = true;                  // Báo hoàn thành
            this.gclDateFinishTrue.OptionsColumn.AllowEdit = true;                  // Ngày hoàn thành
            //_gclAgreeFinish = false;
            this.gclAgreeFinish.OptionsColumn.AllowEdit = false;                // Duyệt
            this.gclCancel.OptionsColumn.AllowEdit = false;
        }

        /// <summary>
        /// Thiết lập thao tác người nhận tự thêm yêu cầu
        /// </summary>

        private void SetEditSenderAndReceiver()
        {
            this.gclListOfNumbers.OptionsColumn.AllowEdit = false;              // STT
            this.gclPriority.OptionsColumn.AllowEdit = true;                        // Độ ưu tiên
            this.gclTask.OptionsColumn.AllowEdit = true;                            // Diễn giải
            this.gclDateRequest.OptionsColumn.AllowEdit = true;                     // Ngày yêu cầu
            this.gclRequireNotes.OptionsColumn.AllowEdit = false;                // Ghi chú (yêu cầu)
            this.gclStage.OptionsColumn.AllowEdit = false;                      // Tình trạng
            //this.gclPersonel_PersonelKeyRecipientDetail.OptionsColumn.AllowEdit = false;   // Người tiếp nhận
            this.gclDateAccept.OptionsColumn.AllowEdit = true;                      // Ngày tiếp nhận
            this.gclDayTaskFinish.OptionsColumn.AllowEdit = true;                   // Dự đoán hoàn thành
            this.gclFeedbackNotes.OptionsColumn.AllowEdit = true;                   // Ghi chú (tiếp nhận)
            //_gclTake = true;
            this.gclTake.OptionsColumn.AllowEdit = true;                            // Tiếp nhận
            this.gclPercentFinish.OptionsColumn.AllowEdit = true;                   // Phần trăm hoàn thành
            //this.gclNoticeFinish.OptionsColumn.AllowEdit = true;                  // Báo hoàn thành
            this.gclDateFinishTrue.OptionsColumn.AllowEdit = false;             // Ngày hoàn thành
            //_gclAgreeFinish = false;
            this.gclAgreeFinish.OptionsColumn.AllowEdit = false;                // Duyệt
            this.gclCancel.OptionsColumn.AllowEdit = false;
        }
        #endregion

        private void xucBar3_btnAddNew_Click(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (!SysUtils.CheckAddByRule(RuleConfig.PYC))
            {
                return;
            }
            xucBar3.Enabled = true;
            xucBar3.AddNewVisible = false;
            xucBar3.DeleteVisible = false;
            xucBar3.EditVisible = false;
            xucBar3.CancelVisible = true;
            xucBar3.SaveVisible = false;
            grcComment.Enabled = true;
            btnUpdate.Visible = false;
            lbcReceiver.Visible = false;

            IsEdit = true;

            this.lbcRequestFormID.Text = "";
            int count = this.m_dbTraining.m_DCReadOnly.Software_RequestForms.GetNumberRequest(Utils.LoginInfo.GblLoginInfo.strUserName);
            this.lbcRequestFormID.Text = UniMana.Utils.LoginInfo.GblLoginInfo.strUserName + "_" + (count + 1).ToString();

            personSenderInfo = new Personnel_PersonnelInfo(Guid.Parse(Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString()));
            lbcSenderID.Text = personSenderInfo.Properties.ID;
            lbcSenderName.Text = personSenderInfo.Properties.LastName + " " + personSenderInfo.Properties.Name;

            lbcReceiverID.Text = "";
            gluSubtitle.EditValue = null;
            gluSubtitle.Enabled = true;
            gluPersonnel_Personnel.Enabled = true;
            gluCatalogue_DepartmentReceive.Enabled = true;
            gluPersonnel_Personnel.EditValue = null;
            gluCatalogue_DepartmentReceive.EditValue = null;

            // Giới hạn thao tác người gửi trên bảng công việc
            SetEditSender();
            gluCatalogue_DepartmentSend.EditValue = Utils.LoginInfo.GblLoginInfo.iDepartmentKey;

            lbcRequestFullName_Bot.Text = personSenderInfo.Properties.LastName + " " + personSenderInfo.Properties.Name;
            btnSend.Enabled = true;
            btnUpdate.Enabled = false;
            this.gctSoftware_RequestForm.Enabled = false;

            lcgChoose.Enabled = false;
            
            this.btnSend.Text = "Gửi yêu cầu";

            DataTable dt = new DataTable();
            dt.Columns.Add("Priority", typeof(int));                    // Độ ưu tiên
            dt.Columns.Add("Task", typeof(string));                        // Nội dung
            dt.Columns.Add("DateRequest", typeof(DateTime));                 // Ngày yêu cầu
            dt.Columns.Add("RequireNotes", typeof(string));                // Ghi chú (yêu cầu)
            dt.Columns.Add("Stage", typeof(int));                       // Tình trạng
            //dt.Columns.Add("Personel_PersonelKeyRecipientDetail", typeof(Guid)); // Người tiếp nhận
            dt.Columns.Add("DateAccept", typeof(DateTime));                  // Ngày tiếp nhận
            dt.Columns.Add("DayTaskFinish", typeof(DateTime));               // Dự đoán hoàn thành
            dt.Columns.Add("FeedbackNotes", typeof(string));               // Ghi chú (tiếp nhận)
            dt.Columns.Add("Take", typeof(bool));                        // Tiếp nhận
            dt.Columns.Add("PercentFinish", typeof(int));               // Phần trăm hoàn thành
            dt.Columns.Add("NoticeFinish", typeof(bool));                // Báo hoàn thành
            dt.Columns.Add("DateFinishTrue", typeof(DateTime));              // Ngày hoàn thành
            dt.Columns.Add("AgreeFinish", typeof(bool));                 // Duyệt
            dt.Columns.Add("Cancel", typeof(bool));

            dt.Columns["Priority"].DefaultValue = 1;
            dt.Columns["DateRequest"].DefaultValue = SysDateTime.Now;
            dt.Columns["Stage"].DefaultValue = 1;
            dt.Columns["PercentFinish"].DefaultValue = 0;
            dt.Columns["AgreeFinish"].DefaultValue = false;
            dt.Columns["Take"].DefaultValue = false;
            dt.Columns["AgreeFinish"].DefaultValue = false;
            this.gctSoftware_RequestFormDetail.DataSource = dt;
        }

        private void xucBar3_btnSave_Click(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (!SysUtils.CheckSaveByRule(RuleConfig.PYC))
            {
                return;
            }
            xucBar3.dlg.Close();
            // Người gửi
            if (m_iconfirm == 0)
            {
                DialogResult result = XtraMessageBox.Show("Bạn có muốn lưu thay đổi", "Thông báo", MessageBoxButtons.YesNo);
                if (result == DialogResult.Yes)
                {
                    this.Validate();
                    this.Validate();
                    IsEdit = false;
                    Software_RequestFormInfo sofinfo = new Software_RequestFormInfo(m_iSofwareKey);
                    sofinfo.Properties.Catalogue_DepartmentKey = GetValueLookUpEdit.ConvertValueToInt(gluCatalogue_DepartmentReceive.EditValue);
                    if (gluPersonnel_Personnel.EditValue != null)
                        sofinfo.Properties.Personel_PersonelKeyRecipient = Guid.Parse(gluPersonnel_Personnel.EditValue.ToString());
                    sofinfo.Properties.Subtitle = GetValueLookUpEdit.ConvertValueToInt(gluSubtitle.EditValue);
                    sofinfo.Save();
                    if (grvSoftware_RequestFormDetail.RowCount > 0)
                    {
                        int rowcount = 0;
                        for (int i = 0; i < grvSoftware_RequestFormDetail.RowCount; i++)
                        {
                            Software_RequestFormDetailInfo detailInfo = new Software_RequestFormDetailInfo(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclSoftware_RequestFormDetailKey).ToInt());
                            if (detailInfo.Properties.Software_RequestFormDetailKey > 0)
                            {
                                // Update các thông tin trước đó
                                try
                                {
                                    detailInfo.Properties.Task = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTask).ToString();
                                }
                                catch { detailInfo.Properties.Task = ""; }
                                try
                                {
                                    detailInfo.Properties.Priority = int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclPriority).ToString());
                                }
                                catch { detailInfo.Properties.Priority = 1; }
                                if (gluPersonnel_Personnel.EditValue != null)
                                    detailInfo.Properties.Personel_PersonelKeyRecipient = Guid.Parse(gluPersonnel_Personnel.EditValue.ToString());
                                try
                                {
                                    detailInfo.Properties.DateRequest = (DateTime)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateRequest));
                                }
                                catch { detailInfo.Properties.DateRequest = null; }
                                try
                                {
                                    detailInfo.Properties.RequireNotes = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclRequireNotes).ToString();
                                }
                                catch { detailInfo.Properties.RequireNotes = ""; }

                                bool agreefinish = false;
                                try
                                {
                                    agreefinish = (bool)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclAgreeFinish));
                                }
                                catch { agreefinish = false; }
                                if (agreefinish)
                                {
                                    if (grvSoftware_RequestFormDetail.GetRowCellValue(i,gclDateFinishTrue) == null)
                                        detailInfo.Properties.DateFinishTrue = SysDateTime.Now;
                                    detailInfo.Properties.AgreeFinish = true;
                                    detailInfo.Properties.Stage = 3;
                                    rowcount++;
                                }
                            }
                            else
                            {
                                // Bổ sung thông tin mới
                                detailInfo.Properties.Software_RequestFormKey = sofinfo.Properties.Software_RequestFormKey;
                                // STT
                                detailInfo.Properties.ListOfNumbers = m_dbTraining.m_DCReadOnly.Software_RequestFormDetails.ReturnListNumberMax(int.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToString())) + 1;
                                try
                                {
                                    detailInfo.Properties.Task = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTask).ToString();
                                }
                                catch { detailInfo.Properties.Task = ""; }
                                try
                                {
                                    detailInfo.Properties.Priority = int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclPriority).ToString());
                                }
                                catch { detailInfo.Properties.Priority = 1; }
                                if (gluPersonnel_Personnel.EditValue != null)
                                    detailInfo.Properties.Personel_PersonelKeyRecipient = Guid.Parse(gluPersonnel_Personnel.EditValue.ToString());
                                detailInfo.Properties.PercentFinish = 0;
                                detailInfo.Properties.NoticeFinish = false;
                                detailInfo.Properties.Stage = 1;        // Chưa tiếp nhận
                                detailInfo.Properties.Take = false;
                                try
                                {
                                    detailInfo.Properties.DateRequest = (DateTime)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateRequest));
                                }
                                catch { detailInfo.Properties.DateRequest = null; }
                                try
                                {
                                    detailInfo.Properties.RequireNotes = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclRequireNotes).ToString();
                                }
                                catch { detailInfo.Properties.RequireNotes = ""; }
                                // Duyệt hoàn thành
                                bool agreefinish = false;
                                try
                                {
                                    agreefinish = (bool)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclAgreeFinish));
                                }
                                catch { agreefinish = false; }
                                detailInfo.Properties.AgreeFinish = agreefinish;

                            }
                            detailInfo.Save();
                        }
                        Software_RequestFormInfo finfo = new Software_RequestFormInfo(int.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToString()));
                        int value = int.Parse(finfo.Properties.StageKey.ToString());
                        if (rowcount == grvSoftware_RequestFormDetail.RowCount)
                            finfo.Properties.StageKey = 3;
                        else
                            finfo.Properties.StageKey = value;
                        finfo.Save();

                        XtraMessageBox.Show("Đã cập nhật", "Thông báo");
                    }
                    gluCatalogue_DepartmentReceive.Enabled = false;
                    gluSubtitle.Enabled = false;
                }
            }
            // Người nhận
            if (m_iconfirm == 1)
            {
                if (CheckSaveReceive())
                {
                    DialogResult result = XtraMessageBox.Show("Bạn có muốn lưu thay đổi", "Thông báo", MessageBoxButtons.YesNo);
                    if (result == DialogResult.Yes)
                    {
                        this.Validate();
                        this.Validate();
                        IsEdit = false;
                        for (int i = 0; i < grvSoftware_RequestFormDetail.RowCount; i++)
                        {
                            int trycath = 0;
                            Software_RequestFormDetailInfo detailinfo;
                            try
                            {
                                detailinfo = new Software_RequestFormDetailInfo(int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclSoftware_RequestFormDetailKey).ToString()));
                                goto capnhat;
                            }
                            catch { trycath = 1; }
                            detailinfo = new Software_RequestFormDetailInfo(int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclSoftware_RequestFormDetailKey).ToString()));
                        capnhat :
                            // Cập nhật thông tin trước đó
                            if ((detailinfo.Properties.Software_RequestFormDetailKey > 0) && (trycath == 0))
                            {
                                // Giá trị tiếp nhận ?                                
                                bool take = false;
                                try
                                {
                                    take = (bool)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTake));
                                }
                                catch { take = false; }
                                int percent = 0;
                                try
                                {
                                    percent = int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclPercentFinish).ToString());
                                }
                                catch { percent = 0; }

                                // hoàn thành
                                if (percent == 100)
                                {
                                    // Độ ưu tiên
                                    if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclPriority) != null)
                                        detailinfo.Properties.Priority = int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclPriority).ToString());
                                    else
                                        detailinfo.Properties.Priority = null;
                                    // Tình trạng
                                    grvSoftware_RequestFormDetail.SetRowCellValue(i, gclStage, 3);
                                    detailinfo.Properties.Stage = 3;
                                    // Ngày tiếp nhận
                                    if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept) != null)
                                        detailinfo.Properties.DateAccept = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept));
                                    else
                                        detailinfo.Properties.DateAccept = SysDateTime.Now;
                                    // Dự đoán hoàn thành
                                    if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish) != null)
                                        detailinfo.Properties.DayTaskFinish = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish));
                                    else
                                        detailinfo.Properties.DayTaskFinish = SysDateTime.Now;
                                    // Tiếp nhận
                                    grvSoftware_RequestFormDetail.SetRowCellValue(i, gclTake, true);
                                    // Ngày hoàn thành
                                    if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateFinishTrue) != null)
                                        detailinfo.Properties.DateFinishTrue = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateFinishTrue));
                                    else
                                        detailinfo.Properties.DateFinishTrue = SysDateTime.Now;
                                }
                                // chưa hoàn thành
                                else
                                {
                                    // Tiếp nhận ?
                                    detailinfo.Properties.Take = take;
                                    if (take)
                                    {
                                        // Tình trạng
                                        detailinfo.Properties.Stage = 2;
                                        // Phần trăm hoàn thành
                                        detailinfo.Properties.PercentFinish = 0;
                                    }
                                    else
                                        detailinfo.Properties.Stage = 1;                // Tình trạng

                                    // Ngày tiếp nhận
                                    try
                                    {
                                        if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept) != null)
                                            detailinfo.Properties.DateAccept = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept));
                                        else
                                            detailinfo.Properties.DateAccept = null;
                                    }
                                    catch { }
                                    // Ngày dự đoán hoàn thành
                                    try
                                    {
                                        if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish) != null)
                                            detailinfo.Properties.DayTaskFinish = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish));
                                        else
                                            detailinfo.Properties.DayTaskFinish = null;
                                    }
                                    catch { }
                                    // Ngày hoàn thành
                                    try
                                    {
                                        if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateFinishTrue) != null)
                                            detailinfo.Properties.DateFinishTrue = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateFinishTrue));
                                        else
                                            detailinfo.Properties.DateFinishTrue = null;
                                    }
                                    catch { }
                                }
                                // Ngày yêu cầu
                                try
                                {
                                    if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateRequest) != null)
                                        detailinfo.Properties.DateRequest = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateRequest));
                                    else
                                        detailinfo.Properties.DateRequest = null;
                                }
                                catch { }
                                // Ghi chú (người nhận)
                                if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclFeedbackNotes) != null)
                                    detailinfo.Properties.FeedbackNotes = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclFeedbackNotes).ToString();
                                // Phần trăm hoàn thành
                                detailinfo.Properties.PercentFinish = percent;
                                // Các thao tác phụ
                                detailinfo.Properties.DateUpdateStage = SysDateTime.Now;
                                detailinfo.Save();
                            }
                            // Bổ sung thông tin mới
                            else
                            {
                                // Giá trị tiếp nhận ?
                                bool take = false;
                                try
                                {
                                    take = (bool)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTake));
                                }
                                catch { take = false; }
                                int percent = 0;
                                try
                                {
                                    percent = int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclPercentFinish).ToString());
                                }
                                catch { percent = 0; }

                                detailinfo.Properties.Software_RequestFormKey = sofwareRequestInfo.Properties.Software_RequestFormKey;

                                // Yêu cầu mới hoàn thành
                                if (percent == 100)
                                {
                                    // Tình trạng
                                    grvSoftware_RequestFormDetail.SetRowCellValue(i, gclStage, 3);
                                    detailinfo.Properties.Stage = 3;
                                }
                                // Yêu cầu mới chưa hoàn thành
                                else
                                {
                                    // Tình trạng
                                    grvSoftware_RequestFormDetail.SetRowCellValue(i, gclStage, 2);
                                    if (take)
                                        detailinfo.Properties.Stage = 2;
                                    else
                                        detailinfo.Properties.Stage = 1;
                                }
                                // Tiếp nhận
                                detailinfo.Properties.Take = take;
                                // STT
                                detailinfo.Properties.ListOfNumbers = m_dbTraining.m_DCReadOnly.Software_RequestFormDetails.ReturnListNumberMax(int.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToString())) + 1;
                                // Diễn giải
                                if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTask) != null)
                                    detailinfo.Properties.Task = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTask).ToString();
                                // Phần trăm hoàn thành
                                detailinfo.Properties.PercentFinish = percent;
                                // Duyệt hoàn thành
                                detailinfo.Properties.AgreeFinish = false;
                                // Ngày hoàn thành chính thức
                                if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateFinishTrue) != null)
                                    detailinfo.Properties.DateFinishTrue = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateFinishTrue));
                                else
                                    detailinfo.Properties.DateFinishTrue = null;
                                // Người tiếp nhận
                                detailinfo.Properties.Personel_PersonelKeyRecipient = Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey;
                                // Ngày yêu cầu
                                if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateRequest) != null)
                                    detailinfo.Properties.DateRequest = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateRequest));
                                else
                                    detailinfo.Properties.DateRequest = SysDateTime.Now;
                                // Độ ưu tiên
                                if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclPriority) != null)
                                    detailinfo.Properties.Priority = int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclPriority).ToString());
                                // Ngày tiếp nhận
                                if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept) != null)
                                    detailinfo.Properties.DateAccept = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept));
                                else
                                    detailinfo.Properties.DateAccept = null;
                                // Dự đoán
                                if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish) != null)
                                    detailinfo.Properties.DayTaskFinish = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish));
                                else
                                    detailinfo.Properties.DayTaskFinish = null;
                                // Ghi chú (yêu cầu)
                                detailinfo.Properties.RequireNotes = "Người tiếp nhận đề xuất";
                                // Ghi chú (tiếp nhận)
                                if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclFeedbackNotes) != null)
                                    detailinfo.Properties.FeedbackNotes = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclFeedbackNotes).ToString();
                            }
                            detailinfo.Save();
                        }
                        XtraMessageBox.Show("Đã cập nhật", "Thông báo");
                        btnUpdate.Text = "Đã nhận";
                        xucBar3.EditVisible = false;
                    }
                }
                else
                    XtraMessageBox.Show("Một số thông tin về ngày tháng năm tiếp nhận không phù hợp" + "\n" + "Vui lòng kiểm tra lại!", "Thông báo");
                gluPersonnel_Personnel.Enabled = false;
                gctSoftware_RequestForm.Enabled = true;
            }
            
            xucBar3.Enabled = true;
            xucBar3.AddNewVisible = true;
            xucBar3.DeleteVisible = false;
            btnUpdate.Enabled = false;
            xucBar3.CancelVisible = false;
            xucBar3.SaveVisible = false;
            xucBar3.ExportExcelVisible = false;
            gctSoftware_RequestForm.Enabled = true;
            lcgChoose.Enabled = true;

            GetRequestForm(int.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToString()));
            SetNotAllowEdit();
        }

        private void xucBar3_btnCancel_Click(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            IsEdit = false;
            xucBar3.Enabled = true;
            xucBar3.AddNewVisible = true;
            xucBar3.DeleteVisible = false;
            xucBar3.EditVisible = true;
            xucBar3.CancelVisible = false;
            xucBar3.SaveVisible = false;

            lcgChoose.Enabled = true;
            gctSoftware_RequestForm.Enabled = true;

            btnSend.Enabled = false;
            btnUpdate.Enabled = false;

            lbcRequestFormID.Text = "";
            lbcRequestFullName.Text = "";
            lbcRequestFullName_Bot.Text = "";

            SetNotAllowEdit();

            gluCatalogue_DepartmentReceive.Enabled = false;
            gluPersonnel_Personnel.Enabled = false;
        }

        private void xucBar3_btnRefresh_Click(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            //try
            //{
            //    if (this.grvSoftware_RequestFormDetail.GetFocusedRowCellValue(this.gclSoftware_RequestFormDetailKey) != null)
            //    {
            //        int iRowHandle = this.grvSoftware_RequestFormDetail.GetFocusedRowCellValue(this.gclSoftware_RequestFormDetailKey).ToInt();
            //        Software_RequestFormDetailInfo detailInfo = new Software_RequestFormDetailInfo(iRowHandle);
            //        if (detailInfo.Properties.AgreeFinish.Value || detailInfo.Properties.Cancel.Value)
            //        {
            //            FrmSoftware_RequestForm_ReOpen open = new FrmSoftware_RequestForm_ReOpen(detailInfo.Properties.Software_RequestFormDetailKey);
            //            if (open.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            //            {
            //                //Load lại
            //                LoadDetail();
            //            }
            //        }
            //        else
            //        {
            //            XtraMessageBox.Show("Chức năng này chỉ thực hiện cho công việc đã hoàn thành hoặc đã hủy");
            //        }
            //    }
            //    SetNotAllowEdit();
            //}
            //catch { }
        }        

        private void xucBar3_btnEdit_Click(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (!SysUtils.CheckEditByRule(RuleConfig.PYC))
            {
                return;
            }
            if (grvSoftware_RequestForm.RowCount > 0)
            {
                xucBar3.dlg.Close();
                m_iSofwareKey = grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToInt();
                Software_RequestFormInfo info = new Software_RequestFormInfo(m_iSofwareKey);
                if (info.Properties.Software_RequestFormKey > 0)
                {
                    bool next = false;
                    if (info.Properties.Personel_PersonelKeyRequest.ToString() == Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString())
                        next = true;
                    else
                        if (info.Properties.Personel_PersonelKeyRecipient == null)
                            if (info.Properties.Catalogue_DepartmentKey == Utils.LoginInfo.GblLoginInfo.iDepartmentKey)
                                next = true;
                            else next = false;
                        else
                            if (info.Properties.Personel_PersonelKeyRecipient.ToString() == Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString())
                                next = true;
                            else
                                next = false;
                    if (next)
                    {
                        //if (info.Properties.StageKey < 3)
                        //{
                        IsEdit = true;
                        xucBar3.Enabled = true;
                        xucBar3.AddNewVisible = false;
                        xucBar3.DeleteVisible = false;
                        xucBar3.EditVisible = false;
                        xucBar3.CancelVisible = true;
                        xucBar3.SaveVisible = true;

                        if (Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey != null)
                        {
                            if (this.grvSoftware_RequestForm.RowCount > 0)
                            {
                                xucBar3.CancelVisible = true;
                                xucBar3.AddNewVisible = false;
                                xucBar3.EditVisible = false;
                                xucBar3.SaveVisible = true;

                                lcgChoose.Enabled = false;
                                gctSoftware_RequestForm.Enabled = false;
                                btnSend.Enabled = false;
                                btnUpdate.Enabled = false;

                                Personnel_PersonnelInfo person = new Personnel_PersonnelInfo(Guid.Parse(Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString()));
                                if (((info.Properties.Personel_PersonelKeyRequest == Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey) && (info.Properties.Personel_PersonelKeyRecipient == null)) || ((info.Properties.Personel_PersonelKeyRequest == Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey) && (info.Properties.Personel_PersonelKeyRecipient == Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey)))
                                {
                                    FrmSoftware_RequestForm_Confirm confirm = new FrmSoftware_RequestForm_Confirm();
                                    confirm.ShowDialog();
                                    m_iconfirm = confirm.Confirm;
                                }
                                else
                                {
                                    if (info.Properties.Personel_PersonelKeyRequest == Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey)
                                        m_iconfirm = 0;
                                    if (info.Properties.Personel_PersonelKeyRequest != Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey)
                                        m_iconfirm = 1;
                                }

                                gctSoftware_RequestFormDetail.DataSource = m_dbTraining.m_DCReadOnly.Software_RequestFormDetails.GetByRequestForm(info.Properties.Software_RequestFormKey);

                                // Người gửi
                                if (m_iconfirm == 0)
                                {
                                    SetEditSender();
                                    gclAgreeFinish.OptionsColumn.AllowEdit = true;
                                    // Cài đặt giao diện
                                    if (info.Properties.StageKey == 1)
                                    {
                                        gluPersonnel_Personnel.Enabled = true;
                                        gluCatalogue_DepartmentReceive.Enabled = true;
                                        gluSubtitle.Enabled = true;
                                    }
                                    if (info.Properties.StageKey == 2)
                                    {
                                        gluPersonnel_Personnel.Enabled = false;
                                        gluCatalogue_DepartmentReceive.Enabled = false;
                                        gluSubtitle.Enabled = false;
                                    }
                                    if (info.Properties.StageKey == 3)
                                    {
                                        gluPersonnel_Personnel.Enabled = false;
                                        gluCatalogue_DepartmentReceive.Enabled = false;
                                        gluSubtitle.Enabled = false;
                                    }
                                    btnSend.Text = "Đã gửi";
                                }
                                // Người nhận
                                else
                                {
                                    if (info.Properties.StageKey == 1)
                                    {
                                        xucBar3.SaveVisible = false;
                                        btnUpdate.Enabled = true;
                                    }
                                    else
                                    {
                                        xucBar3.SaveVisible = true;
                                        btnUpdate.Enabled = false;
                                    }
                                    btnUpdate.Text = "Tiếp nhận yêu cầu";
                                    SetEditReceiver();
                                    // Cài đặt giao diện
                                    gluCatalogue_DepartmentReceive.Enabled = false;
                                    gluPersonnel_Personnel.Enabled = false;
                                    if (info.Properties.Personel_PersonelKeyRecipient == null)
                                        gluPersonnel_Personnel.EditValue = Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey;
                                    if (info.Properties.Catalogue_DepartmentKeySender != null)
                                        gluCatalogue_DepartmentSend.EditValue = info.Properties.Catalogue_DepartmentKeySender;

                                    if (info.Properties.StageKey > 1)
                                    {
                                        this.btnUpdate.Enabled = false;
                                        this.btnUpdate.Text = "Đã nhận";
                                    }
                                }
                            }
                        }
                        else
                            XtraMessageBox.Show("Bạn đã đăng xuất khỏi hệ thống.", "Thông báo");
                    }
                    else
                        XtraMessageBox.Show("Bạn chỉ có thể " + xucBar3.EditCaption + " phiếu yêu cầu do mình gửi hoặc được yêu cầu.", "Thông báo");
                }
                else
                    XtraMessageBox.Show("Chưa chọn phiếu", "Thông báo");
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.Validate();
            IsEdit = false;
            if (gluCatalogue_DepartmentReceive.EditValue == null)
            {
                XtraMessageBox.Show("Phòng ban không được bỏ trống.", "Thông báo");
                IsEdit = true;
                return;
            }
            if (GetValueLookUpEdit.ConvertValueToInt(gluSubtitle.EditValue) <= 0)
            {
                XtraMessageBox.Show("Tiêu đề không được bỏ trống.", "Thông báo");
                IsEdit = true;
                return;
            }

            if (DialogResult.Yes == XtraMessageBox.Show("Bạn có chắc là gửi yêu cầu này?", "Xác nhận", MessageBoxButtons.YesNo))
            {
                Software_RequestFormInfo info = new Software_RequestFormInfo();
                info.Properties.ID = lbcRequestFormID.Text;
                info.Properties.Personel_PersonelKeyRequest = Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey;
                info.Properties.Catalogue_DepartmentKey = GetValueLookUpEdit.ConvertValueToInt(gluCatalogue_DepartmentReceive.EditValue);
                if (GetValueLookUpEdit.ConvertValueToInt(gluCatalogue_DepartmentSend.EditValue) > 0)
                    info.Properties.Catalogue_DepartmentKeySender = GetValueLookUpEdit.ConvertValueToInt(gluCatalogue_DepartmentSend.EditValue);
                else
                    info.Properties.Catalogue_DepartmentKeySender = 0;
                if (gluPersonnel_Personnel.EditValue != null)
                    info.Properties.Personel_PersonelKeyRecipient = Guid.Parse(gluPersonnel_Personnel.EditValue.ToString());
                info.Properties.Subtitle = GetValueLookUpEdit.ConvertValueToInt(gluSubtitle.EditValue);
                info.Properties.StageKey = 1;               // Chưa tiếp nhận
                info.Properties.Take = false;
                info.Save();
                // Chi tiết phiếu yêu cầu
                for (int i = 0; i < this.grvSoftware_RequestFormDetail.RowCount; i++)
                {
                    Software_RequestFormDetailInfo detailInfo = new Software_RequestFormDetailInfo();
                    detailInfo.Properties.Software_RequestFormKey = info.Properties.Software_RequestFormKey;
                    detailInfo.Properties.ListOfNumbers = (m_dbTraining.m_DCReadOnly.Software_RequestFormDetails.ReturnListNumberMax(info.Properties.Software_RequestFormKey) + 1);
                    try
                    {
                        detailInfo.Properties.Task = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTask).ToString();
                    }
                    catch { }
                    try
                    {
                        detailInfo.Properties.Priority = int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclPriority).ToString());
                    }
                    catch { }
                    if (gluPersonnel_Personnel.EditValue != null)
                        detailInfo.Properties.Personel_PersonelKeyRecipient = Guid.Parse(gluPersonnel_Personnel.EditValue.ToString());
                    detailInfo.Properties.PercentFinish = 0;
                    //detailInfo.Properties.NoticeFinish = false;
                    detailInfo.Properties.PercentFinish = 0;
                    detailInfo.Properties.Take = false;
                    detailInfo.Properties.AgreeFinish = false;
                    detailInfo.Properties.Stage = 1;        // Chưa tiếp nhận
                    detailInfo.Properties.Take = false;
                    try
                    {
                        detailInfo.Properties.DateRequest = (DateTime)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateRequest));
                    }
                    catch { }
                    try
                    {
                        detailInfo.Properties.RequireNotes = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclRequireNotes).ToString();
                    }
                    catch { detailInfo.Properties.RequireNotes = ""; }
                    detailInfo.Save();
                }

                XtraMessageBox.Show("Gửi yêu cầu thành công.");
                lcgChoose.Enabled = true;
                gctSoftware_RequestForm.Enabled = true;
                xucBar3.Enabled = true;
                xucBar3.AddNewVisible = true;
                xucBar3.DeleteVisible = false;
                xucBar3.EditVisible = false;
                xucBar3.CancelVisible = false;
                xucBar3.SaveVisible = false;

                //gctSoftware_RequestFormDetail.RefreshDataSource();

                // Hiển thị lại danh sách các chi tiết phiếu

                m_tblSofwareDetail = new DataTable();
                m_tblSofwareDetail = m_dbTraining.m_DCReadOnly.Software_RequestForms.GetListDetail(m_dbTraining.m_DCReadOnly.Software_RequestFormDetails,
                    int.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToString())).ToDataTable();
                if (m_tblSofwareDetail.Rows.Count > 0)
                {
                    gctSoftware_RequestFormDetail.DataSource = null;
                    gctSoftware_RequestFormDetail.RefreshDataSource();

                    DataView dview = m_tblSofwareDetail.DefaultView;
                    dview.Sort = "ListOfNumbers ASC";
                    m_tblSofwareDetail = dview.ToTable();

                    gctSoftware_RequestFormDetail.DataSource = m_tblSofwareDetail;
                }
                else
                {
                    gctSoftware_RequestFormDetail.DataSource = null;
                }

                SetNotAllowEdit();
                gluCatalogue_DepartmentSend.Enabled = false;
                gluCatalogue_DepartmentReceive.Enabled = false;
                gluPersonnel_Personnel.Enabled = false;
                gluSubtitle.Enabled = false;

                // Nạp lại danh sách tiêu đề cho lưới danh sách phiếu
                DataTable m_tbl1 = new DataTable();
                m_tbl1 = m_dbTraining.m_DCReadOnly.Catalogue_RuleNameVis.ToDataTable();
                rluCatalogue_RuleNameVi.DataSource = null;
                rluCatalogue_RuleNameVi.GetData(m_tbl1, "Catalogue_RuleNameViKey", "Name");

                // Nạp lại danh sách lưới phiếu yêu cầu
                DataTable m_tbl2 = new DataTable();
                m_tbl2 = m_dbTraining.m_DCReadOnly.Software_RequestForms.GetListItem(Guid.Parse(Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString()),
                Utils.LoginInfo.GblLoginInfo.iDepartmentKey,
                ReturnStage(cmbStage.Text),
                ReturnTask(cmbTask.Text)).ToDataTable();
                gctSoftware_RequestForm.DataSource = null;
                gctSoftware_RequestForm.RefreshDataSource();
                gctSoftware_RequestForm.DataSource = m_tbl2;
                grvSoftware_RequestForm.ExpandAllGroups();
            }
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.Validate();
            Software_RequestFormInfo info = new Software_RequestFormInfo(m_iSofwareKey);
            if (info.Properties.Software_RequestFormKey > 0)
            {
                if (CheckSaveReceive())
                {
                    if (info.Properties.StageKey == 1)
                    {
                        if (DialogResult.Yes == XtraMessageBox.Show("Bạn có muốn tiếp nhận yêu cầu này?", "Xác nhận", MessageBoxButtons.YesNo))
                        {
                            IsEdit = false;
                            if (info.Properties.Personel_PersonelKeyRecipient == null)
                                info.Properties.Personel_PersonelKeyRecipient = Guid.Parse(gluPersonnel_Personnel.EditValue.ToString());
                            info.Properties.StageKey = 2;
                            info.Properties.Take = true;
                            info.Save();
                            for (int i = 0; i < grvSoftware_RequestForm.RowCount; i++)
                            {
                                try
                                {
                                    Software_RequestFormDetailInfo detailinfo = new Software_RequestFormDetailInfo(int.Parse(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclSoftware_RequestFormDetailKey).ToString()));
                                    if (detailinfo.Properties.Software_RequestFormDetailKey > 0)
                                    {
                                        // Giá trị tiếp nhận ?                                
                                        bool take = (bool)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTake));
                                        // Tiếp nhận ?
                                        detailinfo.Properties.Take = (bool)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTake));
                                        // Người tiếp nhận
                                        detailinfo.Properties.Personel_PersonelKeyRecipient = Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey;
                                        if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclFeedbackNotes) != null)
                                            detailinfo.Properties.FeedbackNotes = grvSoftware_RequestFormDetail.GetRowCellValue(i, gclFeedbackNotes).ToString();
                                        if (take)
                                        {
                                            detailinfo.Properties.Stage = 2;                // Tình trạng
                                            // Ngày tiếp nhận
                                            if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept) != null)
                                                detailinfo.Properties.DateAccept = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept));
                                            // Ngày dự đoán hoàn thành
                                            if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish) != null)
                                                detailinfo.Properties.DayTaskFinish = Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish));
                                            detailinfo.Properties.Take = take;
                                        }
                                        else
                                        {
                                            detailinfo.Properties.Stage = 1;                // Tình trạng
                                        }
                                        // Các thao tác phụ
                                        grvSoftware_RequestForm.SetFocusedRowCellValue(gclStageKey, 2);

                                        detailinfo.Properties.DateUpdateStage = SysDateTime.Now;
                                        detailinfo.Save();
                                    }
                                    else
                                        continue;
                                }
                                catch { continue; }
                            }

                            XtraMessageBox.Show("Tiếp nhận yêu cầu thành công.");
                            btnUpdate.Text = "Đã nhận";
                            btnUpdate.Enabled = false;

                            // Nạp lại danh sách lưới phiếu yêu cầu
                            grvSoftware_RequestForm.SetFocusedRowCellValue(gclStageKey, 2);
                            DataTable m_tbl2 = new DataTable();
                            m_tbl2 = m_dbTraining.m_DCReadOnly.Software_RequestForms.GetListItem(Guid.Parse(Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString()),
                            Utils.LoginInfo.GblLoginInfo.iDepartmentKey,
                            ReturnStage(cmbStage.Text),
                            ReturnTask(cmbTask.Text)).ToDataTable();
                            gctSoftware_RequestForm.DataSource = null;
                            gctSoftware_RequestForm.RefreshDataSource();
                            gctSoftware_RequestForm.DataSource = m_tbl2;
                            grvSoftware_RequestForm.ExpandAllGroups();

                            SetNotAllowEdit();
                            gluPersonnel_Personnel.Enabled = false;
                            xucBar3.Enabled = true;
                            xucBar3.AddNewVisible = true;
                            xucBar3.DeleteVisible = false;
                            xucBar3.EditVisible = false;
                            xucBar3.CancelVisible = false;
                            xucBar3.SaveVisible = false;
                            lcgChoose.Enabled = true;
                            gctSoftware_RequestForm.Enabled = true;
                        }
                    }
                }
                else
                    XtraMessageBox.Show("Một số thông tin về ngày tháng năm tiếp nhận không phù hợp" + "\n" + "Vui lòng kiểm tra lại!", "Thông báo");
            }
            else
            {
                XtraMessageBox.Show("Phiếu yêu cầu không hợp lệ. Không thể cập nhật.", "Thông báo");
                btnUpdate.Enabled = false;
            }
        }

        /// <summary>
        /// Hàm kiểm tra tiếp nhận
        /// </summary>
        /// <returns></returns>

        private bool CheckSaveReceive()
        {
            if (grvSoftware_RequestFormDetail.RowCount > 0)
            {
                for (int i = 0; i < grvSoftware_RequestFormDetail.RowCount; i++)
                {
                    bool take = false;
                    try
                    {
                        take = (bool)(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclTake));
                    }
                    catch { take = false; }
                    if (take)
                    {
                        // Ngày tiếp nhận và ngày dự đoán hoàn thành không được bỏ trống
                        if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept) == null)
                            //(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish) == null))
                            return false;
                        // Ngày tiếp nhận phải trước ngày dự đoán hoàn thành
                        if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish) != null)
                            if (Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept)) > Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish)))
                                return false;
                        // Ngày hoàn thành phải sau ngày tiếp nhận và ngày dự đoán hoàn thành (tạm thời không sử dụng do chức năng tự động cập nhật ngày hoàn thành)
                        //if (grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateFinishTrue) != null)
                        //    if ((Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateAccept)) > Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateFinishTrue))) || (Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDayTaskFinish)) > Convert.ToDateTime(grvSoftware_RequestFormDetail.GetRowCellValue(i, gclDateFinishTrue))))
                        //        return false;
                    }
                }
                return true;
            }
            else
            {
                return true;
            }
        }

        private void grvSoftware_RequestForm_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
            //try
            {
                int row = e.RowHandle;
                if (this.grvSoftware_RequestForm.GetRowCellValue(row, gclStageKey).ToInt() == 0)
                {
                    e.Appearance.ForeColor = Color.Red;
                }
                if (this.grvSoftware_RequestForm.GetRowCellValue(row, gclStageKey).ToInt() == 1)
                {
                    e.Appearance.ForeColor = Color.Black;
                }
                if (this.grvSoftware_RequestForm.GetRowCellValue(row, gclStageKey).ToInt() == 2)
                {
                    e.Appearance.ForeColor = Color.DarkOrange;
                }
                if (this.grvSoftware_RequestForm.GetRowCellValue(row, gclStageKey).ToInt() == 3)
                {
                    e.Appearance.ForeColor = Color.Green;
                }
            }
            //catch { }
        }

        private void gluCatalogue_Department_EditValueChanged(object sender, EventArgs e)
        {
            DataTable m_tbl = new DataTable();
            m_tbl = m_dbTraining.m_DCReadOnly.Personnel_Personnels.GetListByDepartment(GetValueLookUpEdit.ConvertValueToInt(gluCatalogue_DepartmentReceive.EditValue)).ToDataTable();
            gluPersonnel_Personnel.GetData(m_tbl, "Personnel_PersonnelKey", "FullName");
        }

        //private void SaveLog(Software_RequestFormDetailInfo detailInfo, LogStyle logStyle, double _dPercent = -1)
        //{
            //if (logStyle == LogStyle.Cancel)
            //{
            //    DateTime now = Lib.Sys.SysDateTime.Now;
            //    Software_RequestFormLogInfo logInfo = new Software_RequestFormLogInfo();
            //    logInfo.Properties.Date = now;
            //    logInfo.Properties.Note = "Hủy công việc";
            //    logInfo.Properties.Personel_PersonelKey = Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey;
            //    logInfo.Properties.Software_RequestFormDetailKey = detailInfo.Properties.Software_RequestFormDetailKey;
            //    logInfo.Properties.Personel_PersonelKeyRecipient = detailInfo.Properties.Personel_PersonelKeyRecipient;
            //    logInfo.Save();
            //}
            //if (logStyle == LogStyle.NoticeFinish)
            //{
            //    DateTime now = Lib.Sys.SysDateTime.Now;
            //    Software_RequestFormLogInfo logInfo = new Software_RequestFormLogInfo();
            //    logInfo.Properties.Date = now;
            //    logInfo.Properties.Note = "Báo hoàn thành";
            //    logInfo.Properties.Description = "Ngày tiếp nhận: " + detailInfo.Properties.DateAccept.Value.ToString("dd/MM/yyyy") + "\nNgày dự đoán hoàn thành: " + detailInfo.Properties.DayTaskFinish.Value.ToString("dd/MM/yyyy");// +"\nNgày hoàn thành thực sự: " + detailInfo.Properties.DateFinishTrue.Value.ToString("dd/MM/yyyy");
            //    logInfo.Properties.Personel_PersonelKeyRecipient = detailInfo.Properties.Personel_PersonelKeyRecipient;
            //    logInfo.Properties.Personel_PersonelKey = Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey;
            //    logInfo.Properties.Software_RequestFormDetailKey = detailInfo.Properties.Software_RequestFormDetailKey;
            //    logInfo.Save();
            //}

            //if (logStyle == LogStyle.Take)
            //{
            //    DateTime now = Lib.Sys.SysDateTime.Now;
            //    Software_RequestFormLogInfo logInfo = new Software_RequestFormLogInfo();
            //    logInfo.Properties.Date = now;
            //    logInfo.Properties.Note = "Tiếp nhận công việc";
            //    logInfo.Properties.Description = "Ngày tiếp nhận:" + detailInfo.Properties.DateAccept.Value.ToString("dd/MM/yyyy") + "\nNgày dự đoán hoàn thành: " + detailInfo.Properties.DayTaskFinish.Value.ToString("dd/MM/yyyy");
            //    //logInfo.Properties.Personel_PersonelKeyRecipient = detailInfo.Properties.Personel_PersonelKeyRecipient;
            //    logInfo.Properties.Personel_PersonelKey = Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey;
            //    logInfo.Properties.Software_RequestFormDetailKey = detailInfo.Properties.Software_RequestFormDetailKey;
            //    logInfo.Save();
            //}

            //if (logStyle == LogStyle.Finish)
            //{
            //    DateTime now = Lib.Sys.SysDateTime.Now;
            //    Software_RequestFormLogInfo logInfo = new Software_RequestFormLogInfo();
            //    logInfo.Properties.Date = now;
            //    logInfo.Properties.Note = "Duyệt hoàn thành";
            //    try
            //    {
            //        logInfo.Properties.Description = "Ngày tiếp nhận: " + detailInfo.Properties.DateAccept.Value.ToString("dd/MM/yyyy") + "\nNgày dự đoán hoàn thành: " + detailInfo.Properties.DayTaskFinish.Value.ToString("dd/MM/yyyy") + "\nNgày hoàn thành thực sự: " + detailInfo.Properties.DateFinishTrue.Value.ToString("dd/MM/yyyy");
            //    }
            //    catch { }
            //    logInfo.Properties.Personel_PersonelKeyRecipient = detailInfo.Properties.Personel_PersonelKeyRecipient;
            //    logInfo.Properties.Personel_PersonelKey = Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey;
            //    logInfo.Properties.Software_RequestFormDetailKey = detailInfo.Properties.Software_RequestFormDetailKey;
            //    logInfo.Save();
            //}

            //if (logStyle == LogStyle.NotFinish)
            //{
            //    DateTime now = Lib.Sys.SysDateTime.Now;
            //    Software_RequestFormLogInfo logInfo = new Software_RequestFormLogInfo();
            //    logInfo.Properties.Date = now;
            //    logInfo.Properties.Note = "Không duyệt hoàn thành";
            //    logInfo.Properties.Personel_PersonelKeyRecipient = detailInfo.Properties.Personel_PersonelKeyRecipient;
            //    logInfo.Properties.Personel_PersonelKey = Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey;
            //    logInfo.Properties.Software_RequestFormDetailKey = detailInfo.Properties.Software_RequestFormDetailKey;
            //    logInfo.Properties.Description = "Ngày tiếp nhận: " + detailInfo.Properties.DateAccept.Value.ToString("dd/MM/yyyy") + "\nNgày dự đoán hoàn thành: " + detailInfo.Properties.DayTaskFinish.Value.ToString("dd/MM/yyyy");

            //    if (_dPercent != -1)
            //    {
            //        logInfo.Properties.Description = "\nChuyển từ " + detailInfo.Properties.PercentFinish + "% sang " + _dPercent + "%";
            //    }
            //    logInfo.Save();
            //}
        //}

        private enum LogStyle
        {
            //Cancel,NoticeFinish,Finish,NotFinish,Take
        }

        private void xucBar3_btnDelete_Click(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (!SysUtils.CheckDeleteByRule(RuleConfig.PYC))
            {
                return;
            }
            xucBar3.dlg.Close();
            if (grvSoftware_RequestForm.RowCount > 0)
            {
                int key = int.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToString());
                string id = grvSoftware_RequestForm.GetFocusedRowCellValue(gclID).ToString();
                int stag = int.Parse ((grvSoftware_RequestForm.GetFocusedRowCellValue(gclStageKey)).ToString());
                string person = grvSoftware_RequestForm.GetFocusedRowCellValue(gclPersonel_PersonelKeyRequest).ToString();
                if (key > 0)
                {
                    if (person == Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString())
                    {
                        if (key > 0)
                        {
                            string pre = "";
                            if (stag == 1)
                                pre = "";
                            if (stag == 2)
                                pre = "Phiếu đã được tiếp nhận. ";
                            if (stag == 3)
                                pre = "Phiếu đã được hoàn thành. ";

                            DialogResult result = XtraMessageBox.Show(pre + "Bạn có chắc muốn xóa phiếu " + id, "Thông báo", MessageBoxButtons.YesNo);
                            if (result == DialogResult.Yes)
                            {
                                DataTable m_tbl = new DataTable();
                                m_tbl = m_dbTraining.m_DCReadOnly.Software_RequestFormDetails.GetListWithRequestKey(key).ToDataTable();
                                if (m_tbl.Rows.Count > 0)
                                {
                                    for (int i = 0; i < m_tbl.Rows.Count; i++)
                                    { 
                                        Software_RequestFormDetailInfo detail = new Software_RequestFormDetailInfo(int.Parse(m_tbl.Rows[i]["Software_RequestFormDetailKey"].ToString()));
                                        detail.Delete();
                                    }
                                }
                                Software_RequestFormInfo info = new Software_RequestFormInfo(key);
                                info.Delete();
                                XtraMessageBox.Show("Đã xóa", "Thông báo");
                                GetListRequest();
                            }
                        }
                        else
                            XtraMessageBox.Show("Chưa chọn phiếu yêu cầu", "Thông báo");
                    }
                    else
                        XtraMessageBox.Show("Chỉ có người yêu cầu mới được phép xóa", "Thông báo");
                }
                else
                    XtraMessageBox.Show("Chưa chọn phiếu", "Thông báo");
            }
        }

        private void Auto_Tick(object sender, EventArgs e)
        {
            if (grvSoftware_RequestForm.RowCount > 0)
            { }
            else
                m_iSofwareKey = 0;

            // Bật tắt các ghi chú và các dấu * ghi chú các thông tin bắt buộc
            bool _flag = false;
            if (gluCatalogue_DepartmentReceive.Enabled == true)
            {
                _flag = true;
                lciDepartmentNote.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
            }
            else
                lciDepartmentNote.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
            if (gluSubtitle.Enabled == true)
            {
                _flag = true;
                lciSubtitleNote.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
            }
            else
                lciSubtitleNote.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
            if (_flag)
            {
                lciCommentNote.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
                lciPreComment.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
            }
            else
            {
                if (btnUpdate.Enabled == true)
                {
                    lciCommentNote.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
                    lciPreComment.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
                    lbcNote.Text = "Khi chưa tiếp nhận thì dữ liệu thêm mới sẽ không được lưu";
                }
                else
                {
                    lciCommentNote.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
                    lciPreComment.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
                    lbcNote.Text = " Phần có gắn dấu * là thông tin bắt buộc";
                }
            }
        }

        #region [Thay đổi con trỏ chuột trên 2 nút gửi và nhận]
        public struct IconInfo
        {
            public bool fIcon;
            public int xHotspot;
            public int yHotspot;
            public IntPtr hbmMask;
            public IntPtr hbmColor;
        }
        // Tạo 1 đối tưởng kiểu Bitmap => Vì con trỏ chuột của chúng ta là 1 cái hình
        Bitmap img;
        [DllImport("user32.dll")]
        public static extern IntPtr CreateIconIndirect(ref IconInfo icon);
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);
        public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
        {
            IntPtr ptr = bmp.GetHicon();
            IconInfo tmp = new IconInfo();
            GetIconInfo(ptr, ref tmp);
            tmp.xHotspot = xHotSpot;
            tmp.yHotspot = yHotSpot;
            tmp.fIcon = false;
            ptr = CreateIconIndirect(ref tmp);
            return new Cursor(ptr);
        }

        private void btnSend_MouseHover(object sender, EventArgs e)
        {
            //if (btnSend.Enabled == true)
            //{
            //    if (System.IO.File.Exists(System.IO.Directory.GetCurrentDirectory() + @"\Images\CursorSoftware.png"))
            //    {
            //        this.img = new Bitmap(System.IO.Directory.GetCurrentDirectory() + @"\Images\CursorSoftware.png");
            //        this.Cursor = CreateCursor(img, 1, 1);
            //    }
            //}
        }

        private void btnSend_MouseLeave(object sender, EventArgs e)
        {
            //Cursor cur = Cursors.Arrow;
            //this.Cursor = cur;
        }

        private void btnUpdate_MouseHover(object sender, EventArgs e)
        {
            //if (btnUpdate.Enabled == true)
            //{
            //    this.img = new Bitmap("E:\\CursorSoftware.png");
            //    this.Cursor = CreateCursor(img, 1, 1);
            //}
        }

        private void btnUpdate_MouseLeave(object sender, EventArgs e)
        {
            //Cursor cur = Cursors.Arrow;
            //this.Cursor = cur;
        }
        #endregion

        private void bandedGridView1_ShowingEditor(object sender, CancelEventArgs e)
        {
            if (IsEdit == true)  // Chỉ kiểm tra khi chỉnh sửa
            {
                try
                {
                    if ((!grvSoftware_RequestFormDetail.IsFilterRow(grvSoftware_RequestFormDetail.FocusedRowHandle)) && (!grvSoftware_RequestFormDetail.IsNewItemRow(grvSoftware_RequestFormDetail.FocusedRowHandle)))
                    {
                        if ((grvSoftware_RequestFormDetail.FocusedColumn == gclTask) || (grvSoftware_RequestFormDetail.FocusedColumn == gclPriority) || (grvSoftware_RequestFormDetail.FocusedColumn == gclDateRequest) || (grvSoftware_RequestFormDetail.FocusedColumn == gclRequireNotes))
                        {
                            if ((m_iconfirm == 0) && (sofwareRequestInfo.Properties.Take == false))
                                e.Cancel = false;
                            else
                                e.Cancel = true;
                        }
                    }

                    if (grvSoftware_RequestFormDetail.FocusedColumn == gclPercentFinish)
                        this.gclPercentFinish.ColumnEdit = null;
                    else
                        this.gclPercentFinish.ColumnEdit = this.riProgress;

                    // Duyệt hoàn thành không thể chỉnh sửa

                    bool agree = false;
                    try
                    {
                        agree = (bool)m_tblSofwareDetail.Rows[grvSoftware_RequestFormDetail.FocusedRowHandle]["AgreeFinish"];
                    }
                    catch { agree = false; }
                    if (agree)
                    {
                        e.Cancel = true;
                        XtraMessageBox.Show("Chi tiết công việc đã được duyệt hoàn thành, không thể chỉnh sửa.", "Thông báo");
                    }
                    else
                    {
                        e.Cancel = false;
                    }
                }
                catch { }
            }
            else
                e.Cancel = false;
        }

        private void grvSoftware_RequestFormDetail_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (e.Column == gclPercentFinish)
            {
                this.Validate();
                this.Validate();
                double percenfinish = 0;
                try
                {
                    percenfinish = int.Parse(grvSoftware_RequestFormDetail.GetFocusedRowCellValue(gclPercentFinish).ToString());
                }
                catch { percenfinish = 0; }
                if (percenfinish > 0)
                    grvSoftware_RequestFormDetail.SetFocusedRowCellValue(gclDateFinishTrue, SysDateTime.Now);
                else
                    grvSoftware_RequestFormDetail.SetFocusedRowCellValue(gclDateFinishTrue, null);
            }
            if (e.Column == gclTake)
            {
                this.Validate();
                this.Validate();
                bool take = false;
                try
                {
                    take = (bool)grvSoftware_RequestFormDetail.GetFocusedRowCellValue(gclTake);
                }
                catch { take = false; }
                if (take)
                {
                    if (grvSoftware_RequestFormDetail.GetFocusedRowCellValue(gclDateAccept) == null)
                        grvSoftware_RequestFormDetail.SetFocusedRowCellValue(gclDateAccept, SysDateTime.Now);
                    if (grvSoftware_RequestFormDetail.GetFocusedRowCellValue(gclDayTaskFinish) == null)
                        grvSoftware_RequestFormDetail.SetFocusedRowCellValue(gclDayTaskFinish, SysDateTime.Now);
                    if (grvSoftware_RequestFormDetail.GetFocusedRowCellValue(gclStage) == null)
                        grvSoftware_RequestFormDetail.SetFocusedRowCellValue(gclStage, 2);
                }
                else
                {
                    grvSoftware_RequestFormDetail.SetFocusedRowCellValue(gclDateAccept, null);
                    grvSoftware_RequestFormDetail.SetFocusedRowCellValue(gclDayTaskFinish, null);
                    grvSoftware_RequestFormDetail.SetFocusedRowCellValue(gclStage, 1);
                }
            }
        }

        private void gctSoftware_RequestFormDetail_Click(object sender, EventArgs e)
        {
            if (this.grvSoftware_RequestFormDetail.IsNewItemRow(this.grvSoftware_RequestFormDetail.FocusedRowHandle))
            {
                if (xucBar3.EditVisible == false)
                {
                    // Mở dòng mới cho người nhận thêm yêu cầu
                    if (m_iconfirm == 1)
                    {
                        SetEditSenderAndReceiver();
                        grvSoftware_RequestFormDetail.SetRowCellValue(grvSoftware_RequestFormDetail.FocusedRowHandle, gclDateRequest, SysDateTime.Now);
                        grvSoftware_RequestFormDetail.SetRowCellValue(grvSoftware_RequestFormDetail.FocusedRowHandle, gclPriority, 1);
                    }
                    // Người gửi yêu cầu
                    else
                        SetEditSender();
                }
                else
                    SetNotAllowEdit();
            }
            this.gclPercentFinish.ColumnEdit = this.riProgress;
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (IsEdit)
            {
                FrmSoftware_RequestForm_AddSubtitle addsub = new FrmSoftware_RequestForm_AddSubtitle();
                addsub.ShowDialog();
                gluSubtitle.GetData(m_dbTraining.m_DCReadOnly.Catalogue_RuleNameVis, "Catalogue_RuleNameViKey", "Name");
            }
        }

        private void xóaChiTiếtPhiếuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!grvSoftware_RequestFormDetail.IsNewItemRow(grvSoftware_RequestFormDetail.FocusedRowHandle))
            {
                if (IsEdit)
                {
                    int r = grvSoftware_RequestFormDetail.FocusedRowHandle;
                    int c = grvSoftware_RequestFormDetail.FocusedColumn.ColumnHandle;
                    if ((r >= 0) && (c >= 0))
                    {
                        int keydetail = 0;
                        try
                        {
                            keydetail = int.Parse(grvSoftware_RequestFormDetail.GetFocusedRowCellValue(gclSoftware_RequestFormDetailKey).ToString());
                        }
                        catch { keydetail = 0; }
                        if (keydetail != 0)
                        {
                            DialogResult result = XtraMessageBox.Show("Bạn có chắc xóa chi tiết phiếu vừa chọn", "Thông báo", MessageBoxButtons.YesNo);
                            if (result == DialogResult.Yes)
                            {
                                Software_RequestFormDetailInfo fdetail = new Software_RequestFormDetailInfo(keydetail);
                                fdetail.Delete();
                                GetRequestForm(int.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToString()));
                            }
                        }
                        else
                        {
                            XtraMessageBox.Show("Chi tiết phiếu chưa lưu. Không thể xóa", "Thông báo");
                        }
                    }
                }
                else
                    XtraMessageBox.Show("Chỉ được phép xóa khi chọn Tiếp nhận - Chỉnh sửa thành công","Thông báo");
            }
        }

        private void FrmSoftware_RequestForm_Click(object sender, EventArgs e)
        {
            this.gclPercentFinish.ColumnEdit = this.riProgress;
        }

        private void chuyểnQuyềnYêuCầuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (grvSoftware_RequestForm.GetFocusedRowCellValue(gclPersonel_PersonelKeyRequest).ToString() == Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey.ToString())
            {
                FrmSoftware_RequestForm_Transfer tranfer = new FrmSoftware_RequestForm_Transfer(int.Parse(grvSoftware_RequestForm.GetFocusedRowCellValue(gclSoftware_RequestFormKey).ToString()));
                tranfer.ShowDialog();

                if ((tranfer.department != 0) && (tranfer.person != ""))
                {
                    grvSoftware_RequestForm.SetFocusedRowCellValue(gclPersonel_PersonelKeyRequest, Guid.Parse(tranfer.person));
                    m_tblSoftware = (DataTable)gctSoftware_RequestForm.DataSource;

                    Personnel_PersonnelInfo pinfo = new Personnel_PersonnelInfo(Guid.Parse(tranfer.person.ToString()));
                    lbcSenderID.Text = pinfo.Properties.ID;
                    lbcSenderName.Text = pinfo.Properties.LastName + " " + pinfo.Properties.Name;
                }
            }
            else
                XtraMessageBox.Show("Bạn không có quyền chuyển quyền yêu cầu", "Thông báo");
        }

        private void xucBar3_btnExport_Click(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            SaveFileDialog saveFile = new SaveFileDialog();
            saveFile.Filter = "*.xlsx | *.xls";
            saveFile.Title = "Lưu tập tin excel";
            if (saveFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                grvSoftware_RequestFormDetail.ExportToXlsx(saveFile.FileName);
            }
        }
    }
}